﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ControleFinanceiro.Dominio.Entidades;

namespace ControleFinanceiro.Tests.Dominio
{
  [TestClass]
  public class Dado_Um_Novo_Lancamento
  {
    Conta conta = null;
    Lancamento lanc;

    [TestInitialize]
    public void Quando_Crio()
    {
      conta = new Conta(new Banco("001", "BB"), "233303030", "001");
      lanc = new Lancamento(conta,"C");
    }
        
    [TestMethod]
    public void A_Conta_Nao_Pode_Ser_Nula()
    {
      Assert.AreNotEqual(null, lanc.Conta);
    }

    [TestMethod]
    public void A_Data_Nao_Pode_Ser_Nula()
    {
      lanc.DataLancamento = DateTime.Now;
      Assert.AreNotEqual(null, lanc.DataLancamento);
    }

    [TestMethod]
    public void O_Valor_Deve_Ser_Maior_Zero()
    {
      lanc.Valor = 10;
      Assert.IsFalse(lanc.Valor <= 0);
    }

    [TestMethod]
    public void Creditando_10_e_Saldo_Conta_20_O_Saldo_Deve_Ser_30()
    {
      conta.Creditar(20);
      lanc = new Lancamento(conta, "C");
      lanc.Valor = 10;
      lanc.Efetivar();
      Assert.AreEqual(30, conta.Saldo);
    }

    [TestMethod]
    public void Debitando_10_e_Saldo_Conta_20_O_Saldo_Deve_Ser_10()
    {
      conta.Creditar(20);
      lanc = new Lancamento(conta, "D");
      lanc.Valor = 10;
      lanc.Efetivar();
      Assert.AreEqual(10, conta.Saldo);
    }

  }
}
